package com.ruitu.mall_98_1.dao.api;

import com.ruitu.router_module.bean.api.BaseResult;
import com.ruitu.router_module.bean.api.PageModel;
import com.ruitu.router_module.bean.app.HomeData;
import com.ruitu.router_module.bean.app.HotWord;
import com.ruitu.router_module.bean.app.Msg;
import com.ruitu.router_module.bean.app.RongToken;
import com.ruitu.router_module.bean.app.RongUser;
import com.ruitu.router_module.bean.mine.Address;
import com.ruitu.router_module.bean.mine.Coupon;
import com.ruitu.router_module.bean.mine.Version;
import com.ruitu.router_module.bean.product.Category;
import com.ruitu.router_module.bean.product.Company;
import com.ruitu.router_module.bean.product.Evaluate;
import com.ruitu.router_module.bean.product.ProDetail;
import com.ruitu.router_module.bean.product.ProList;
import com.ruitu.router_module.bean.product.Product;
import com.ruitu.router_module.bean.product.SearchData;
import com.ruitu.router_module.bean.product.ShopDetail;
import com.ruitu.router_module.bean.product.SpecInfo;

import java.util.List;

import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;

public interface ApiService {
    //融云获取token接口
    @FormUrlEncoded
    @POST("getToken.json")
    Observable<RongToken> reqRongToken(
            @Header("App-Key") String appKey,
            @Header("Nonce") String Nonce,
            @Header("Timestamp") String Timestamp,
            @Header("Signature") String Signature,
            @Field("userId") String userId,
            @Field("name") String name,
            @Field("portraitUri") String portraitUri);

    // index/wineType?timestamp=&token=  请求分类列表 cityName
    @GET("index/getAllClass")
    Observable<BaseResult<List<Category>>> reqCategory(@Query("cityName") String cityName);

    // app/index/addCart 加入购物车
    @FormUrlEncoded
    @POST("index/addCart")
    Observable<BaseResult> addToCart_000(@Field("userId") String userId, @Field("setMealId") String setMealId, @Field("num") int num);

    // index/appIndex app首页
    @GET("index/appIndex")
    Observable<BaseResult<HomeData>> reqAppHome(@Query("cityName") String cityName, @Query("accountId") String accountId);

    // index/getModelByType 推荐商品搜索（淘一淘-更多操作） keys 筛选的关键字搜索的时候传
    @GET("index/getModelByType")
    Observable<BaseResult<PageModel<ProList>>> reqModelProList(@Query("type") String type
            , @Query("cityName") String cityName, @Query("keys") String keys
            , @Query("page") int page, @Query("size") int size);

    // goodDetails/index 商品详情页
    @GET("goodDetails/index")
    Observable<BaseResult<ProDetail>> reqProDetial(@Query("goodId") String goodId, @Query("accountId") String accountId);

    // goodDetails/getModel 获取商品规格
    @GET("goodDetails/getModel")
    Observable<BaseResult<SpecInfo>> reqProSpec(@Query("goodId") String goodId);

    // cart/addCart 加入购物车
    @FormUrlEncoded
    @POST("cart/addCart")
    Observable<BaseResult> addToCart(@Field("goodsId") String goodsId, @Field("accountId")
            String accountId, @Field("num") int num, @Field("skuId") String skuId);

    // goodDetails/getGoodsComment 获取商品评价列表
    @GET("goodDetails/getGoodsComment")
    Observable<BaseResult<PageModel<Evaluate>>> reqEvaluateList(@Query("goodsId") String goodsId
            , @Query("page") int page, @Query("size") int size);

    // index/indexSearchItem 首页搜索栏数据
    @GET("index/indexSearchItem")
    Observable<BaseResult<SearchData>> reqSearchData(@Query("hehe") String hehe);

    // search/goodsOrCompany 搜索商品或者企业 省市区id 三级分类id 关键字 城市名
    // status 0 商品 1 企业 必传    goodSaleModel 商品类型 1 预售 2 直销
    @GET("search/goodsOrCompany")
    Observable<BaseResult<PageModel<Product>>> reqSearchProResult(@Query("provinceId") String provinceId, @Query("cityId")
            String cityId, @Query("countyId") String countyId, @Query("classA") String classA
            , @Query("classB") String classB, @Query("classC") String classC
            , @Query("keys") String keys, @Query("cityName") String cityName
            , @Query("status") String status, @Query("goodSalesModel") String goodSaleModel
            , @Query("page") int page, @Query("size") int size);

    // search/goodsOrCompany 搜索商品或者企业 省市区id 三级分类id 关键字 城市名
    // status 0 商品 1 企业 必传    goodSaleModel 商品类型 1 预售 2 直销
    @GET("search/goodsOrCompany")
    Observable<BaseResult<PageModel<Company>>> reqSearchShopResult(@Query("provinceId") String provinceId, @Query("cityId")
            String cityId, @Query("countyId") String countyId, @Query("classA") String classA
            , @Query("classB") String classB, @Query("classC") String classC
            , @Query("keys") String keys, @Query("cityName") String cityName
            , @Query("status") String status, @Query("goodSalesModel") String goodSaleModel
            , @Query("page") int page, @Query("size") int size);

    // goodDetails/getCoupon 领取优惠券
    @GET("goodDetails/getCoupon")
    Observable<BaseResult> reqGetCoupon(@Query("accountId") String accountId, @Query("couponId") String couponId);

    // collection/addCollection 收藏企业,商品  type 1 商品 2 企业  infoId收藏的商品或企业id
    @GET("collection/addCollection")
    Observable<BaseResult> reqCollect(@Query("accountId") String accountId, @Query("type") String type, @Query("infoId") String infoId);

    // collection/cancelCollection 取消收藏(单条和全部) type 1 商品 2 企业  id 收藏记录的id
    @GET("collection/cancelCollection")
    Observable<BaseResult> reqCollectCancel(@Query("accountId") String accountId, @Query("type") String type, @Query("id") String id);

    // goodDetails/saveReserve 保存修改预订申请信息 status 必传0保存 1修改 goodsSpec 用户输入的规格
    @FormUrlEncoded
    @POST("goodDetails/saveReserve")
    Observable<BaseResult> reqSaveBook(@Field("status") String status, @Field("goodsId")
            String goodsId, @Field("goodsNum") int goodsNum, @Field("goodsSpec") String goodsSpec
            , @Field("accountId") String accountId, @Field("userName") String userName
            , @Field("userPhone") String userPhone, @Field("intro") String intro
            , @Field("addressId") String addressId, @Field("reserveId") String reserveId);

    // company/index 企业官网首页  accountId
    @GET("company/index")
    Observable<BaseResult<ShopDetail>> reqShopDetail(@Query("companyId") String companyId
            , @Query("accountId") String accountId);

    // coupon/getCoupons 获取全部有效的平台优惠券
    @GET("coupon/getCoupons")
    Observable<BaseResult<List<Coupon>>> reqPlatformCoupon();

    // version/checkOne  检查新版本
    @GET("version/checkOne")
    Observable<BaseResult<Version>> reqNewVersion();

    // getSystemMsgList 获取系统消息列表
    @GET("getSystemMsgList")
    Observable<BaseResult<PageModel<Msg>>> reqMsgList(@Query("accountId") String accountId
            , @Query("page") int page, @Query("size") int size);

    // getSystemMsgList 获取系统消息详情
    @GET("getSystemMsgInfo")
    Observable<BaseResult<Msg>> reqMsgDetial(@Query("id") String id);

    // chat/welcome 请求回复欢迎消息
    @GET("chat/welcome")
    Observable<BaseResult> reqMsgWelcome(@Query("from") String from, @Query("to") String to);

    // chat/getUserInfo 获取用户信息
    @GET("chat/getUserInfo")
    Observable<BaseResult<RongUser>> reqUserInfo(@Query("accountId") String accountId);

    // getUnReadMsg?accountId= 未读消息数量
    @GET("getUnReadMsg")
    Observable<BaseResult<Integer>> reqUnReadNum(@Query("accountId") String accountId);

    //user/getMineAddress 收货地址列表
    @GET("user/getMineAddress")
    Observable<BaseResult<List<Address>>> reqAddr(@Query("accountId") String accountId);

    // coupon/getRandomCoupons 大礼包优惠券
    @GET("coupon/getRandomCoupons")
    Observable<BaseResult<List<Coupon>>> reqRandomCoupon(@Query("accountId") String accountId);

    // removeSystemMsg 删除消息
//    @GET("removeSystemMsg")
//    Observable<BaseResult> reqDelMsg(@Query("id") String id, @Query("accountId") String accountId);

    // handleSystemMsg  type 0 删除单条 2 删除全部 3 全部已读
    @GET("handleSystemMsg")
    Observable<BaseResult> handleSystemMsg(@Query("id") String id, @Query("accountId") String accountId, @Query("type") int type);

    // /app/index/quickKeys 热搜关键词列表
    @GET("index/quickKeys")
    Observable<BaseResult<List<HotWord>>> reqHotList();
}